﻿using System;
using System.IO;
using Common;
using Model.Sys;
using Model.Sys.Config;
using Model.Sys.Constant;
using Quartz;

namespace QScheduler.Job
{
    public class ClearUselessCacheFile: IJob//清除超期3小时未写入的用户信息缓存文件
    {
        public void Execute(IJobExecutionContext context)
        {
            string fileRootPath = Path.GetFullPath(AppDomain.CurrentDomain.BaseDirectory + CacheConfig.CacheFilePath);
            FileInfo[] files = IOHelper.GetFiles(fileRootPath);

            if (files.Length > 0)
            {
                foreach (var file in files)
                {
                    if (file.Name.StartsWith(Constant.CacheKey.UserInfoLoginCacheKey))
                    {
                        //方案一：利用file.LastWriteTime来比较，性能较高，但是不够准确
                        int cacheTime = ConfigHelper.GetConfigInt("CacheTime");//单位：分钟
                        TimeSpan ts = DateTime.Now - file.LastWriteTime;
                        int min = (ts.Days * 24 + ts.Hours) *60 + ts.Minutes;

                        if (min >= cacheTime)
                        {
                            File.Delete(file.FullName);
                        }



                        //方案二：利用反序列化后的对象的失效时间来比较，大文件反序列化性能较差（10M），但是准确
                        //FileStream _file = File.OpenRead(file.FullName);
                        //if (_file.CanRead)
                        //{
                        //    object obj = SerializeHelper.BinaryDeSerialize(_file);
                        //    Cache cache = (Cache) obj;
                        //    if (cache != null)
                        //    {
                        //        //判断是否过期,过期则删除缓存文件
                        //        if (cache.FailureTime <= DateTime.Now)
                        //        {
                        //            File.Delete(file.FullName);
                        //        }
                        //    }
                        //}
                    }
                }
            }
        }
    }
}
